home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / lib / include / tcl.h < prev    next >
C/C++ Source or Header  |  1992-12-17  |  12KB  |  341 lines

  1. /*
  2.  * tcl.h --
  3.  *
  4.  *    This header file describes the externally-visible facilities
  5.  *    of the Tcl interpreter.
  6.  *
  7.  * Copyright 1987-1991 Regents of the University of California
  8.  * Permission to use, copy, modify, and distribute this
  9.  * software and its documentation for any purpose and without
  10.  * fee is hereby granted, provided that the above copyright
  11.  * notice appear in all copies.  The University of California
  12.  * makes no representations about the suitability of this
  13.  * software for any purpose.  It is provided "as is" without
  14.  * express or implied warranty.
  15.  *
  16.  * $Header: /user6/ouster/tcl/RCS/tcl.h,v 1.84 92/08/07 08:21:34 ouster Exp $ SPRITE (Berkeley)
  17.  */
  18.  
  19. #ifndef _TCL
  20. #define _TCL
  21.  
  22. #define TCL_VERSION "6.4"
  23.  
  24. /*
  25.  * Definitions that allow this header file to be used either with or
  26.  * without ANSI C features like function prototypes.
  27.  */
  28.  
  29. #undef _ANSI_ARGS_
  30. #undef const
  31. #if ((defined(__STDC__) || defined(SABER)) && !defined(NO_PROTOTYPE)) || defined(__cplusplus)
  32. #   define _ANSI_ARGS_(x)    x
  33. #   define CONST const
  34. #   ifdef __cplusplus
  35. #       define VARARGS (...)
  36. #   else
  37. #       define VARARGS ()
  38. #   endif
  39. #else
  40. #   define _ANSI_ARGS_(x)    ()
  41. #   define CONST
  42. #endif
  43.  
  44. #ifdef __cplusplus
  45. #   define EXTERN extern "C"
  46. #else
  47. #   define EXTERN extern
  48. #endif
  49.  
  50. /*
  51.  * Miscellaneous declarations (to allow Tcl to be used stand-alone,
  52.  * without the rest of Sprite).
  53.  */
  54.  
  55. #ifndef NULL
  56. #define NULL 0
  57. #endif
  58.  
  59. #ifndef _CLIENTDATA
  60. typedef int *ClientData;
  61. #define _CLIENTDATA
  62. #endif
  63.  
  64. /*
  65.  * Data structures defined opaquely in this module.  The definitions
  66.  * below just provide dummy types.  A few fields are made visible in
  67.  * Tcl_Interp structures, namely those for returning string values.
  68.  * Note:  any change to the Tcl_Interp definition below must be mirrored
  69.  * in the "real" definition in tclInt.h.
  70.  */
  71.  
  72. typedef struct Tcl_Interp{
  73.     char *result;        /* Points to result string returned by last
  74.                  * command. */
  75.     void (*freeProc) _ANSI_ARGS_((char *blockPtr));
  76.                 /* Zero means result is statically allocated.
  77.                  * If non-zero, gives address of procedure
  78.                  * to invoke to free the result.  Must be
  79.                  * freed by Tcl_Eval before executing next
  80.                  * command. */
  81.     int errorLine;        /* When TCL_ERROR is returned, this gives
  82.                  * the line number within the command where
  83.                  * the error occurred (1 means first line). */
  84. } Tcl_Interp;
  85.  
  86. typedef int *Tcl_Trace;
  87. typedef int *Tcl_CmdBuf;
  88.  
  89. /*
  90.  * When a TCL command returns, the string pointer interp->result points to
  91.  * a string containing return information from the command.  In addition,
  92.  * the command procedure returns an integer value, which is one of the
  93.  * following:
  94.  *
  95.  * TCL_OK        Command completed normally;  interp->result contains
  96.  *            the command's result.
  97.  * TCL_ERROR        The command couldn't be completed successfully;
  98.  *            interp->result describes what went wrong.
  99.  * TCL_RETURN        The command requests that the current procedure
  100.  *            return;  interp->result contains the procedure's
  101.  *            return value.
  102.  * TCL_BREAK        The command requests that the innermost loop
  103.  *            be exited;  interp->result is meaningless.
  104.  * TCL_CONTINUE        Go on to the next iteration of the current loop;
  105.  *            interp->result is meaninless.
  106.  */
  107.  
  108. #define TCL_OK        0
  109. #define TCL_ERROR    1
  110. #define TCL_RETURN    2
  111. #define TCL_BREAK    3
  112. #define TCL_CONTINUE    4
  113.  
  114. #define TCL_RESULT_SIZE 199
  115.  
  116. /*
  117.  * Procedure types defined by Tcl:
  118.  */
  119.  
  120. typedef void (Tcl_CmdDeleteProc) _ANSI_ARGS_((ClientData clientData));
  121. typedef int (Tcl_CmdProc) _ANSI_ARGS_((ClientData clientData,
  122.     Tcl_Interp *interp, int argc, char *argv[]));
  123. typedef void (Tcl_CmdTraceProc) _ANSI_ARGS_((ClientData clientData,
  124.     Tcl_Interp *interp, int level, char *command, Tcl_CmdProc *proc,
  125.     ClientData cmdClientData, int argc, char *argv[]));
  126. typedef void (Tcl_FreeProc) _ANSI_ARGS_((char *blockPtr));
  127. typedef char *(Tcl_VarTraceProc) _ANSI_ARGS_((ClientData clientData,
  128.     Tcl_Interp *interp, char *name1, char *name2, int flags));
  129.  
  130. /*
  131.  * Flag values passed to Tcl_Eval (see the man page for details;  also
  132.  * see tclInt.h for additional flags that are only used internally by
  133.  * Tcl):
  134.  */
  135.  
  136. #define TCL_BRACKET_TERM    1
  137.  
  138. /*
  139.  * Flag that may be passed to Tcl_ConvertElement to force it not to
  140.  * output braces (careful!  if you change this flag be sure to change
  141.  * the definitions at the front of tclUtil.c).
  142.  */
  143.  
  144. #define TCL_DONT_USE_BRACES    1
  145.  
  146. /*
  147.  * Flag value passed to Tcl_RecordAndEval to request no evaluation
  148.  * (record only).
  149.  */
  150.  
  151. #define TCL_NO_EVAL        -1
  152.  
  153. /*
  154.  * Specil freeProc values that may be passed to Tcl_SetResult (see
  155.  * the man page for details):
  156.  */
  157.  
  158. #define TCL_VOLATILE    ((Tcl_FreeProc *) -1)
  159. #define TCL_STATIC    ((Tcl_FreeProc *) 0)
  160. #define TCL_DYNAMIC    ((Tcl_FreeProc *) free)
  161.  
  162. /*
  163.  * Flag values passed to variable-related procedures.
  164.  */
  165.  
  166. #define TCL_GLOBAL_ONLY        1
  167. #define TCL_APPEND_VALUE    2
  168. #define TCL_LIST_ELEMENT    4
  169. #define TCL_NO_SPACE        8
  170. #define TCL_TRACE_READS        0x10
  171. #define TCL_TRACE_WRITES    0x20
  172. #define TCL_TRACE_UNSETS    0x40
  173. #define TCL_TRACE_DESTROYED    0x80
  174. #define TCL_INTERP_DESTROYED    0x100
  175. #define TCL_LEAVE_ERR_MSG    0x200
  176.  
  177. /*
  178.  * Additional flag passed back to variable watchers.  This flag must
  179.  * not overlap any of the TCL_TRACE_* flags defined above or the
  180.  * TRACE_* flags defined in tclInt.h.
  181.  */
  182.  
  183. #define TCL_VARIABLE_UNDEFINED    8
  184.  
  185. /*
  186.  * The following declarations either map ckalloc and ckfree to
  187.  * malloc and free, or they map them to procedures with all sorts
  188.  * of debugging hooks defined in tclCkalloc.c.
  189.  */
  190.  
  191. #ifdef TCL_MEM_DEBUG
  192.  
  193. EXTERN char *        Tcl_DbCkalloc _ANSI_ARGS_((unsigned int size,
  194.                 char *file, int line));
  195. EXTERN int        Tcl_DbCkfree _ANSI_ARGS_((char *ptr,
  196.                 char *file, int line));
  197. #  define ckalloc(x) Tcl_DbCkalloc(x, __FILE__, __LINE__)
  198. #  define ckfree(x)  Tcl_DbCkfree(x, __FILE__, __LINE__)
  199.  
  200. #else
  201.  
  202. #  define ckalloc(x) malloc(x)
  203. #  define ckfree(x)  free(x)
  204.  
  205. #endif /* TCL_MEM_DEBUG */
  206.  
  207. /*
  208.  * Macro to free up result of interpreter.
  209.  */
  210.  
  211. #define Tcl_FreeResult(interp)                    \
  212.     if ((interp)->freeProc != 0) {                \
  213.     if ((interp)->freeProc == (Tcl_FreeProc *) free) {    \
  214.         ckfree((interp)->result);                \
  215.     } else {                        \
  216.         (*(interp)->freeProc)((interp)->result);        \
  217.     }                            \
  218.     (interp)->freeProc = 0;                    \
  219.     }
  220.  
  221. /*
  222.  * Exported Tcl procedures:
  223.  */
  224.  
  225. EXTERN void        Tcl_AppendElement _ANSI_ARGS_((Tcl_Interp *interp,
  226.                 char *string, int noSep));
  227. EXTERN void        Tcl_AppendResult _ANSI_ARGS_(VARARGS);
  228. EXTERN char *        Tcl_AssembleCmd _ANSI_ARGS_((Tcl_CmdBuf buffer,
  229.                 char *string));
  230. EXTERN void        Tcl_AddErrorInfo _ANSI_ARGS_((Tcl_Interp *interp,
  231.                 char *message));
  232. EXTERN char        Tcl_Backslash _ANSI_ARGS_((char *src,
  233.                 int *readPtr));
  234. EXTERN char *        Tcl_Concat _ANSI_ARGS_((int argc, char **argv));
  235. EXTERN int        Tcl_ConvertElement _ANSI_ARGS_((char *src,
  236.                 char *dst, int flags));
  237. EXTERN Tcl_CmdBuf    Tcl_CreateCmdBuf _ANSI_ARGS_((void));
  238. EXTERN void        Tcl_CreateCommand _ANSI_ARGS_((Tcl_Interp *interp,
  239.                 char *cmdName, Tcl_CmdProc *proc,
  240.                 ClientData clientData,
  241.                 Tcl_CmdDeleteProc *deleteProc));
  242. EXTERN Tcl_Interp *    Tcl_CreateInterp _ANSI_ARGS_((void));
  243. EXTERN int        Tcl_CreatePipeline _ANSI_ARGS_((Tcl_Interp *interp,
  244.                 int argc, char **argv, int **pidArrayPtr,
  245.                 int *inPipePtr, int *outPipePtr,
  246.                 int *errFilePtr));
  247. EXTERN Tcl_Trace    Tcl_CreateTrace _ANSI_ARGS_((Tcl_Interp *interp,
  248.                 int level, Tcl_CmdTraceProc *proc,
  249.                 ClientData clientData));
  250. EXTERN void        Tcl_DeleteCmdBuf _ANSI_ARGS_((Tcl_CmdBuf buffer));
  251. EXTERN int        Tcl_DeleteCommand _ANSI_ARGS_((Tcl_Interp *interp,
  252.                 char *cmdName));
  253. EXTERN void        Tcl_DeleteInterp _ANSI_ARGS_((Tcl_Interp *interp));
  254. EXTERN void        Tcl_DeleteTrace _ANSI_ARGS_((Tcl_Interp *interp,
  255.                 Tcl_Trace trace));
  256. EXTERN void        Tcl_DetachPids _ANSI_ARGS_((int numPids, int *pidPtr));
  257. EXTERN int        Tcl_DumpActiveMemory _ANSI_ARGS_((char *fileName));
  258. EXTERN char *        Tcl_ErrnoId _ANSI_ARGS_((void));
  259. EXTERN int        Tcl_Eval _ANSI_ARGS_((Tcl_Interp *interp, char *cmd,
  260.                 int flags, char **termPtr));
  261. EXTERN int        Tcl_EvalFile _ANSI_ARGS_((Tcl_Interp *interp,
  262.                 char *fileName));
  263. EXTERN int        Tcl_ExprBoolean _ANSI_ARGS_((Tcl_Interp *interp,
  264.                 char *string, int *ptr));
  265. EXTERN int        Tcl_ExprDouble _ANSI_ARGS_((Tcl_Interp *interp,
  266.                 char *string, double *ptr));
  267. EXTERN int        Tcl_ExprLong _ANSI_ARGS_((Tcl_Interp *interp,
  268.                 char *string, long *ptr));
  269. EXTERN int        Tcl_ExprString _ANSI_ARGS_((Tcl_Interp *interp,
  270.                 char *string));
  271. EXTERN int        Tcl_Fork _ANSI_ARGS_((void));
  272. EXTERN int        Tcl_GetBoolean _ANSI_ARGS_((Tcl_Interp *interp,
  273.                 char *string, int *boolPtr));
  274. EXTERN int        Tcl_GetDouble _ANSI_ARGS_((Tcl_Interp *interp,
  275.                 char *string, double *doublePtr));
  276. EXTERN int        Tcl_GetInt _ANSI_ARGS_((Tcl_Interp *interp,
  277.                 char *string, int *intPtr));
  278. EXTERN char *        Tcl_GetVar _ANSI_ARGS_((Tcl_Interp *interp,
  279.                 char *varName, int flags));
  280. EXTERN char *        Tcl_GetVar2 _ANSI_ARGS_((Tcl_Interp *interp,
  281.                 char *name1, char *name2, int flags));
  282. EXTERN int        Tcl_GlobalEval _ANSI_ARGS_((Tcl_Interp *interp,
  283.                 char *command));
  284. EXTERN void        Tcl_InitHistory _ANSI_ARGS_((Tcl_Interp *interp));
  285. EXTERN void        Tcl_InitMemory _ANSI_ARGS_((Tcl_Interp *interp));
  286. EXTERN char *        Tcl_Merge _ANSI_ARGS_((int argc, char **argv));
  287. EXTERN char *        Tcl_ParseVar _ANSI_ARGS_((Tcl_Interp *interp,
  288.                 char *string, char **termPtr));
  289. EXTERN int        Tcl_RecordAndEval _ANSI_ARGS_((Tcl_Interp *interp,
  290.                 char *cmd, int flags));
  291. EXTERN void        Tcl_ResetResult _ANSI_ARGS_((Tcl_Interp *interp));
  292. #define Tcl_Return Tcl_SetResult
  293. EXTERN int        Tcl_ScanElement _ANSI_ARGS_((char *string,
  294.                 int *flagPtr));
  295. EXTERN void        Tcl_SetErrorCode _ANSI_ARGS_(VARARGS);
  296. EXTERN void        Tcl_SetResult _ANSI_ARGS_((Tcl_Interp *interp,
  297.                 char *string, Tcl_FreeProc *freeProc));
  298. EXTERN char *        Tcl_SetVar _ANSI_ARGS_((Tcl_Interp *interp,
  299.                 char *varName, char *newValue, int flags));
  300. EXTERN char *        Tcl_SetVar2 _ANSI_ARGS_((Tcl_Interp *interp,
  301.                 char *name1, char *name2, char *newValue,
  302.                 int flags));
  303. EXTERN char *        Tcl_SignalId _ANSI_ARGS_((int sig));
  304. EXTERN char *        Tcl_SignalMsg _ANSI_ARGS_((int sig));
  305. EXTERN int        Tcl_SplitList _ANSI_ARGS_((Tcl_Interp *interp,
  306.                 char *list, int *argcPtr, char ***argvPtr));
  307. EXTERN int        Tcl_StringMatch _ANSI_ARGS_((char *string,
  308.                 char *pattern));
  309. EXTERN char *        Tcl_TildeSubst _ANSI_ARGS_((Tcl_Interp *interp,
  310.                 char *name));
  311. EXTERN int        Tcl_TraceVar _ANSI_ARGS_((Tcl_Interp *interp,
  312.                 char *varName, int flags, Tcl_VarTraceProc *proc,
  313.                 ClientData clientData));
  314. EXTERN int        Tcl_TraceVar2 _ANSI_ARGS_((Tcl_Interp *interp,
  315.                 char *name1, char *name2, int flags,
  316.                 Tcl_VarTraceProc *proc, ClientData clientData));
  317. EXTERN char *        Tcl_UnixError _ANSI_ARGS_((Tcl_Interp *interp));
  318. EXTERN int        Tcl_UnsetVar _ANSI_ARGS_((Tcl_Interp *interp,
  319.                 char *varName, int flags));
  320. EXTERN int        Tcl_UnsetVar2 _ANSI_ARGS_((Tcl_Interp *interp,
  321.                 char *name1, char *name2, int flags));
  322. EXTERN void        Tcl_UntraceVar _ANSI_ARGS_((Tcl_Interp *interp,
  323.                 char *varName, int flags, Tcl_VarTraceProc *proc,
  324.                 ClientData clientData));
  325. EXTERN void        Tcl_UntraceVar2 _ANSI_ARGS_((Tcl_Interp *interp,
  326.                 char *name1, char *name2, int flags,
  327.                 Tcl_VarTraceProc *proc, ClientData clientData));
  328. EXTERN int        Tcl_VarEval _ANSI_ARGS_(VARARGS);
  329. EXTERN ClientData    Tcl_VarTraceInfo _ANSI_ARGS_((Tcl_Interp *interp,
  330.                 char *varName, int flags,
  331.                 Tcl_VarTraceProc *procPtr,
  332.                 ClientData prevClientData));
  333. EXTERN ClientData    Tcl_VarTraceInfo2 _ANSI_ARGS_((Tcl_Interp *interp,
  334.                 char *name1, char *name2, int flags,
  335.                 Tcl_VarTraceProc *procPtr,
  336.                 ClientData prevClientData));
  337. EXTERN int        Tcl_WaitPids _ANSI_ARGS_((int numPids, int *pidPtr,
  338.                 int *statusPtr));
  339.  
  340. #endif /* _TCL */
  341.